<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>天气案例_监视属性_简写</title>
    <!-- 引入Vue.js -->
    <script src="../js/vue.js"></script>
  </head>
  <body>
    <!-- 准备好一个容器 -->
    <div id="root">
      <h2>今天天气很{{weather}}</h2>
      <button @click="changeWeather">切换天气</button>
    </div>
  </body>
  <script>
    const vm = new Vue({
      el: "#root",
      data() {
        return {
          isHot: true,
        };
      },
      // 计算属性
      computed: {
        weather() {
          return this.isHot ? "炎热" : "凉爽";
        },
      },
      // 方法
      methods: {
        changeWeather() {
          this.isHot = !this.isHot;
        },
      },
      // 监视属性
      watch: {
        // 正常写法
        /* isHot: {
          // immediate: true, // 初始化时让 handler 调用一下
          // deep:true,  // 深度监视
          handler(newValue, oldValue) {
            console.log(`天气变化为:${newValue},之前的天气为:${oldValue}`);
          },
        }, */
        // 简写 前提:只使用handler(),而不使用immediate,deep 等配置
        weather(newValue,oldValue){ // 该方法为handler方法
          console.log(`天气变化为:${newValue},之前的天气为:${oldValue}`);
        }
      },
    });

    // 正常写法
    /* vm.$watch("isHot",{
      immediate:true,
      deep:true,
      handler(newValue,oldValue){
        console.log(`天气变化为:${newValue},之前的天气为:${oldValue}`);
      }
    }) */

    // 简写 前提:只使用handler(),而不使用immediate,deep 等配置
    vm.$watch("weather", function (newValue, oldValue) {
      console.log(`天气变化为:${newValue},之前的天气为:${oldValue}`);
    });
  </script>
</html>
